﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Library.BLL;

namespace View
{
    public partial class frmCadastroViagem : Form
    {

        #region declaracao dos DataTables
        DataTable dtVeiculos;
        DataTable dtUFs;
        DataTable dtCidades;
        DataTable dtPagadores;
        DataTable dtDadosViagem;
        #endregion

        #region declaracao dos controllers

        //PessoaController ctrlPessoa = new PessoaController();
        CidadeController ctrlCidade = new CidadeController();
        UFController ctrlUF = new UFController();
        PagadoresController ctrlPagadores = new PagadoresController();
        ViagensController ctrlViagens = new ViagensController();

        DateTime dataPartida;
        DateTime dataRetorno;

        #endregion


        public frmCadastroViagem()
        {
            InitializeComponent();
        }

        private void populaDadosUsuario(int codigoUsuario)
        {
            throw new NotImplementedException();
        }

        private void frmCadastroViagem_Load(object sender, EventArgs e)
        {
            bindingDados();
            populaOrgaosPagadores();
        }

        private void bindingDados()
        {
            //Carrega UF e Cidade
            dtUFs = ctrlUF.getAllRecords();

            cbUF.DataSource = dtUFs;
            cbUF.DisplayMember = "SIGLA_ESTADO";
            cbUF.ValueMember = "SIGLA_ESTADO";

            //Seta o primeiro tipo de transporte
            cbTipoTransporte.SelectedIndex = 0;

        }

        private void populaCidades()
        {
            dtCidades = ctrlCidade.getCidadesPorEstado(dtUFs.Rows[cbUF.SelectedIndex]["SIGLA_ESTADO"].ToString());

            cbCidades.DataSource = dtCidades;
            cbCidades.DisplayMember = "NOME_CIDADE";
            cbCidades.ValueMember = "COD_CIDADE";
        }

        private void cbUF_SelectedIndexChanged(object sender, EventArgs e)
        {
            populaCidades();
        }

        private void btnBuscaOrgaos_Click(object sender, EventArgs e)
        {
            frmOrgaoPagador frmManutencaoOrgao = new frmOrgaoPagador();
            DialogResult cadastrado = frmManutencaoOrgao.ShowDialog();

            if (cadastrado == DialogResult.OK)
            {
                populaOrgaosPagadores();
                cbOrgaoPagador.SelectedIndex = frmManutencaoOrgao.indiceRetorno;
            }
        }

        private void populaOrgaosPagadores()
        {
            dtPagadores = ctrlPagadores.getAllRecords();
            cbOrgaoPagador.DataSource = dtPagadores;
            cbOrgaoPagador.ValueMember = "COD_PAGADOR";
            cbOrgaoPagador.DisplayMember = "NOME_PAGADOR";
        }

        private void cbCidades_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbCidades.SelectedIndex != -1)
                txtTipo.Text = "Tipo " + dtCidades.Rows[cbCidades.SelectedIndex]["COD_TIPO_LOCAL"].ToString();
        }

        private void cbTipoTransporte_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbTipoTransporte.SelectedIndex == 1)
            {
                if (dtVeiculos == null)
                {
                    dtVeiculos = ctrlViagens.getPlacasVeiculos();
                }
                cbVeiculo.DataSource = dtVeiculos;
                cbVeiculo.DisplayMember = "MEIO_TRANSP";
                cbVeiculo.ValueMember = "MEIO_TRANSP";
                cbVeiculo.Enabled = true;
            }
            else
            {
                cbVeiculo.DataSource = null;
                cbVeiculo.Enabled = false;
            }
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void frmCadastroViagem_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult cancelar = MessageBox.Show("Deseja cancelar a operação?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            e.Cancel = !(cancelar == DialogResult.Yes);
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            if (validaCampos())
            {
                DataTable dtCadastro = ctrlViagens.createDataTable();
                dtCadastro.Rows.Add(dtCadastro.NewRow());
                dtCadastro.Rows[0].BeginEdit();

                //Binding dos dados
                dtCadastro.Rows[0]["COD_VIAGEM"] = ctrlViagens.getNextCodigoViagem();
                //dtCadastro.Rows[0]["ID_NOME"] = 1;
                //dtCadastro.Rows[0]["NIVEL"] = ;
                //dtCadastro.Rows[0]["NIVELINDICE"] = ;
                //dtCadastro.Rows[0]["LOCAL"] = ;
                //dtCadastro.Rows[0]["LOCAL_TIPO"] = ;
                dtCadastro.Rows[0]["DT_SAIDA"] = dataPartida;
                dtCadastro.Rows[0]["DT_CHEGADA"] = dataRetorno;
                dtCadastro.Rows[0]["KM_PERCORRIDA"] = txtQuilometro.Text;
                dtCadastro.Rows[0]["MEIO_TRANSP"] = cbTipoTransporte.Text;
                dtCadastro.Rows[0]["MOTIVO"] = txtMotivoViagem.Text;
                dtCadastro.Rows[0]["ORIGEM_PAGTO"] = cbOrgaoPagador.Text;
                //dtCadastro.Rows[0]["UFESP"] = ;
                dtCadastro.Rows[0]["ALOJAMENTO"] = cbAlojamento.Checked;
                //dtCadastro.Rows[0]["VALORTOTAL"] = ;
                //dtCadastro.Rows[0]["TIPO"] = ;
                //dtCadastro.Rows[0]["INCREMENTO"] = ;
            }
            else
            {
                this.DialogResult = DialogResult.None;
                return;
            }
            this.DialogResult = DialogResult.OK;
        }

        /// <summary>
        /// Rotina para validar se todos os campos obrigatórios 
        /// estão preenchidos
        /// </summary>
        /// <returns></returns>
        private bool validaCampos()
        {          
            if (String.IsNullOrEmpty(cbHoraPartida.Text))
            {
                MessageBox.Show("Preencha o horário de partida da viagem.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                cbHoraPartida.BackColor = Color.LightCoral;
                cbHoraPartida.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(cbHoraRetorno.Text))
            {
                MessageBox.Show("Preencha o horário de retorno da viagem.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                cbHoraRetorno.BackColor = Color.LightCoral;
                cbHoraRetorno.Focus();
                return false;
            }
            else
            {
                dataPartida = new DateTime(dtpPartida.Value.Year, dtpPartida.Value.Month, dtpPartida.Value.Day, Convert.ToInt32(cbHoraPartida.Text), Convert.ToInt32(cbMinutoPartida.Text), 0);
                dataRetorno = new DateTime(dtpRetorno.Value.Year, dtpRetorno.Value.Month, dtpRetorno.Value.Day, Convert.ToInt32(cbHoraRetorno.Text), Convert.ToInt32(cbMinutosRetorno.Text), 0);
                if (dataPartida >= dataRetorno)
                {
                    MessageBox.Show("A data de partida deve ser menor que a data de retorno.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    dtpPartida.BackColor = Color.LightCoral;
                    dtpPartida.Focus();
                    return false;
                }
            }
            
            if (String.IsNullOrEmpty(cbTipoTransporte.Text))
            {
                MessageBox.Show("Digite o meio de transporte utilizado para a viagem.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                cbTipoTransporte.BackColor = Color.LightCoral;
                cbTipoTransporte.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(cbVeiculo.Text) && cbTipoTransporte.SelectedIndex == 1)
            {
                MessageBox.Show("Selecione o veículo utilizado para a viagem.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                cbVeiculo.BackColor = Color.LightCoral;
                cbVeiculo.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(txtQuilometro.Text))
            {
                MessageBox.Show("Digite a quilometragem rodada na viagem.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtQuilometro.BackColor = Color.LightCoral;
                txtQuilometro.Focus();
                return false;
            }
            else if (String.IsNullOrEmpty(txtMotivoViagem.Text))
            {
                MessageBox.Show("Preencha o motivo da viagem.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtMotivoViagem.BackColor = Color.LightCoral;
                txtMotivoViagem.Focus();
                return false;
            }
            else if (cbUF.SelectedValue == null || String.IsNullOrEmpty(cbUF.SelectedValue.ToString()))
            {
                MessageBox.Show("Selecione o estado destino da viagem.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                cbUF.BackColor = Color.LightCoral;
                cbUF.Focus();
                return false;
            }
            else if (cbCidades.SelectedValue == null || String.IsNullOrEmpty(cbCidades.SelectedValue.ToString()))
            {
                MessageBox.Show("Selecione o destino da viagem.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                cbCidades.BackColor = Color.LightCoral;
                cbCidades.Focus();
                return false;
            }
            return true;
        }

        private void retornaValidacao(object sender, EventArgs e)
        {
            ((Control)sender).BackColor = Color.White;
        }

    }
}
